#include <iostream>
#include<pthread.h>
#include<unistd.h>

#include "BlockQueue.hpp"
#include"Task.hpp"

using namespace std;

// 基于堵塞队列的生产消费模型-线程-锁-条件变量

void *consumer(void* args)
{
    BlockQueue<int> *bq=static_cast<BlockQueue<int> *>(args);
    
    sleep(10);
    while(true)
    {
        sleep(1);
        //获取任务
        int t;
        bq->pop(&t);
        cout<<"获取了一个任务: "<<t<<endl;
        //处理任务...

    }

}

void *producer(void *args)
{
    BlockQueue<int> *bq=static_cast<BlockQueue<int> *>(args);

    while(true)
    {
        sleep(1);

        //生产任务
        static int t=0;
        bq->push(t);
        cout<<"发送了一个任务: "<<t<<endl;
        t++;
    }

    return nullptr;
}

int main()
{
    BlockQueue<int> *bq=new BlockQueue<int>();
    pthread_t c, p;

    pthread_create(&c, nullptr, consumer, bq);
    pthread_create(&p, nullptr, producer, bq);

    pthread_join(c,nullptr);
    pthread_join(p,nullptr);

    return 0;
}